package com.lizhenhua.fmmall.websocket;

import org.springframework.stereotype.Component;

import javax.websocket.OnClose;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.concurrent.ConcurrentHashMap;

@Component
@ServerEndpoint("/webSocket/{oid}")  // 服务结点 可以接受请求   和controller 的写法一样 别人要请求你
public class WebSocketServer {
    private static ConcurrentHashMap<String, Session> sessionMap = new ConcurrentHashMap<>();

    @OnOpen // 前端发送请求建立websocket连接   就会访问这个方法
    public void open(@PathParam("oid") String orderId
            , Session session  //这个session 代表的是连接
    ) {

        //测试 建立连接
        System.out.println("orderId：" + orderId);
        sessionMap.put(orderId, session);  // 以 order为 key  session 为value

    }

    /**
     * 前端关闭页面 或者主动关闭websocket连接，都会执行close
     **/
    @OnClose
    public void close(@PathParam("oid") String orderId) {
        sessionMap.remove(orderId);
    }


//    封装

    public static void sendMsg(String orderId, String msg) {

        try {
            Session session = sessionMap.get(orderId);
            session.getBasicRemote().sendText(msg);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }


}

